library(tidyverse)
Week7 day 1
Dates and Times
Why are they difficult? - formatting them in programming can be tricky -lots of different ways to enter them - tricky data format to work with
ISO-8601 Format - YEAR-MONTH-DAY
Format: YEAR-MONTH-DAY-HH-MM-SS Min digits: 4 b/c of 2000 Clock system: 24 hours Time formats: 4 Timezone - UTC Combined date-times - 2021-12-13-T10:13
library(lubridate)
my_bday <- "09-01-2021"
my_bday
[1] "09-01-2021"
dmy(my_bday)
[1] "2021-01-09"
mdy("January 9th, 2021")
[1] "2021-01-09"
mdy_hms("01-09-21 10:18:26")
[1] "2021-01-09 10:18:26 UTC"
ymd(20190109)
[1] "2019-01-09"
netflix <- read_csv("data/netflix.csv")
netflix <- netflix %>%
mutate(made_date = make_datetime(year, month, day))
head(netflix)
Add a time
Calculating time spans
- difftime: represents
- period
- durations
Period: Subsetting / breaking down periods into readable / digestable periods
When creating/reporting periods, it is important to be careful/cautious about leap years. Because leap years don’t just appear out of nowhere, it is important to be aware of small changes, i.e seconds/minutes/hours, etc - each year is 365.25 years It is really only important to watch that you get the right amount of days
Netflix promotes new releases for 2 weeks before release Netflix takes shows/movies down after 4 months
netflix <- netflix %>%
mutate(promo_date = date_added - weeks(2),
removal_date = date_added + months(4))
netflix %>%
select(date_added, promo_date, removal_date)
Durations: Records the exact passage of time since a date
netflix <- netflix %>%
mutate(time_duration = as.duration(today() - date_added))
netflix %>%
select(date_added, time_difftime, time_years, time_duration)
Timezones
ymd_hms("2021-12-31 11:30:22", tz = "Atlantic/Faroe")
[1] "2021-12-31 11:30:22 WET"
Force_tz - add a timezone, doesn’t change date/time with_tz - figures out what date and time would be if you were in that time zone
Lesson 2
Timeseries
Part of the PDA
- continuous data over time
- time is the primary axis
- append rather than replace
library(tsibble)
library(tsibbledata)
library(feasts)
library(fable)
tsibble is for working with timeseries data feasts - features etc for statistics
index_var - find the index of a tsibble key_vars - find the key of a tsibble
You can use dplyr verbs with tsibble, but you cannot deselect / drop time as a column
vic_year <- vic_elec %>%
filter_index("2012-01")
Warning: System time zone: "Europe/London".
It may yield an unexpected output. Please see `?filter_index` for details.
Make plots


# calculate a rolling window
# the . in .f corresponds to the current window in the data, i.e. each subset
elec_rolling <- vic_elec %>%
mutate(
temp_moving_avg = slide_dbl(
.x = Temperature,
.f = ~ mean(., na.rm = TRUE),
.before = 2000,
.after = 2000,
.complete = TRUE
)
)
elec_rolling
# plot the data
ggplot(elec_rolling) +
geom_line(aes(x = Date, y = Temperature), colour = "grey") +
geom_line(aes(x = Date, y = temp_moving_avg), colour = "red")
The slide_dbl() function makes a number of arguments available, so let’s play around with them a little! Try setting .before and .after to 100. How does the plot change? What happens if you set .complete = TRUE?
Feasts package - useful for plotting
key_vars(tourism)
[1] "Region" "State" "Purpose"



LS0tCnRpdGxlOiAiUiBOb3RlYm9vayIKb3V0cHV0OiBodG1sX25vdGVib29rCi0tLQoKYGBge3J9CmxpYnJhcnkodGlkeXZlcnNlKQpgYGAKCgpXZWVrNyBkYXkgMQoKRGF0ZXMgYW5kIFRpbWVzCgpXaHkgYXJlIHRoZXkgZGlmZmljdWx0PwotIGZvcm1hdHRpbmcgdGhlbSBpbiBwcm9ncmFtbWluZyBjYW4gYmUgdHJpY2t5Ci1sb3RzIG9mIGRpZmZlcmVudCB3YXlzIHRvIGVudGVyIHRoZW0KLSB0cmlja3kgZGF0YSBmb3JtYXQgdG8gd29yayB3aXRoCgoKSVNPLTg2MDEgRm9ybWF0Ci0gWUVBUi1NT05USC1EQVkKCkZvcm1hdDogWUVBUi1NT05USC1EQVktSEgtTU0tU1MKTWluIGRpZ2l0czogNCBiL2Mgb2YgMjAwMApDbG9jayBzeXN0ZW06IDI0IGhvdXJzClRpbWUgZm9ybWF0czogNCAKVGltZXpvbmUgLSBVVEMKQ29tYmluZWQgZGF0ZS10aW1lcyAtIDIwMjEtMTItMTMtVDEwOjEzCgpgYGB7cn0KbGlicmFyeShsdWJyaWRhdGUpCmBgYAoKYGBge3J9Cm15X2JkYXkgPC0gIjA5LTAxLTIwMjEiCm15X2JkYXkKYGBgCgpgYGB7cn0KZGF0ZSA8LSBkbXkobXlfYmRheSkKIyB0cmFuc2Zvcm1zIHRoZSBzdHJpbmcgdG8gYSBkYXRlCmBgYAoKYGBge3J9Cm1keSgiSmFudWFyeSA5dGgsIDIwMjEiKQpgYGAKCmBgYHtyfQptZHlfaG1zKCIwMS0wOS0yMSAxMDoxODoyNiIpCmBgYAoKYGBge3J9CnltZCgyMDE5MDEwOSkKYGBgCgpgYGB7cn0KbmV0ZmxpeCA8LSByZWFkX2NzdigiZGF0YS9uZXRmbGl4LmNzdiIpCmBgYAoKYGBge3J9Cm5ldGZsaXggPC0gbmV0ZmxpeCAlPiUKICBtdXRhdGUoZGF0ZV9hZGRlZCA9IG1keShkYXRlX2FkZGVkKSkKYGBgCgpgYGB7cn0KIyBleHRyYWN0aW5nIGV4YWN0IGRheXMgLyBtb250aHMgZnJvbSB0aGUgZGF0ZQpuZXRmbGl4IDwtIG5ldGZsaXggJT4lCiAgbXV0YXRlKAogICAgZGF5ID0gZGF5KGRhdGVfYWRkZWQpLAogICAgbW9udGggPSBtb250aChkYXRlX2FkZGVkLCBsYWJlbCA9IFRSVUUsIGFiYnIgPSBGQUxTRSksCiAgICB5ZWFyID0geWVhcihkYXRlX2FkZGVkKSwKICAgIHdlZWtkYXkgPSB3ZGF5KGRhdGVfYWRkZWQsIGxhYmVsID0gVFJVRSwgYWJiciA9IEZBTFNFKQogICkKCiMgd2Vla2RheXMoKSBhbmQgd2RheSgpIGlzIHRoZSBzYW1lIC0gd2Vla2RheXMoKSBpcyBiYXNlIFIgYW5kIHdkYXkoKSBpcyBsdWJyaWRhdGUKYGBgCgpgYGB7cn0KbmV0ZmxpeCA8LSBuZXRmbGl4ICU+JQogIG11dGF0ZShtYWRlX2RhdGUgPSBtYWtlX2RhdGV0aW1lKHllYXIsIG1vbnRoLCBkYXkpKQoKaGVhZChuZXRmbGl4KQpgYGAKCkFkZCBhIHRpbWUKYGBge3J9Cm5ldGZsaXggPC0gbmV0ZmxpeCAlPiUKICBtdXRhdGUobWFkZV9kYXRlID0gbWFrZV9kYXRldGltZSh5ZWFyLCBtb250aCwgZGF5LCBob3VyID0gMTYsIG1pbiA9IDU5LCBzZWMgPSA0NSkpCmBgYAoKQ2FsY3VsYXRpbmcgdGltZSBzcGFucwoKLSBkaWZmdGltZTogcmVwcmVzZW50cyAKLSBwZXJpb2QKLSBkdXJhdGlvbnMKCmBgYHtyfQpuZXRmbGl4IDwtIG5ldGZsaXggJT4lCiAgbXV0YXRlKHRpbWVfZGlmZnRpbWUgPSB0b2RheSgpIC0gZGF0ZV9hZGRlZCkgJT4lCiAgc2VsZWN0KHRpbWVfZGlmZnRpbWUsIGRhdGVfYWRkZWQpCmBgYAoKUGVyaW9kOgpTdWJzZXR0aW5nIC8gYnJlYWtpbmcgZG93biBwZXJpb2RzIGludG8gcmVhZGFibGUgLyBkaWdlc3RhYmxlIHBlcmlvZHMKCmBgYHtyfQpuZXRmbGl4IDwtIG5ldGZsaXggJT4lCiAgbXV0YXRlKHRpbWVfcGVyaW9kID0gYXMucGVyaW9kKHRvZGF5KCkgLSBkYXRlX2FkZGVkKSwKICAgICAgICAgdGltZV95ZWFycyA9IGFzLm51bWVyaWModGltZV9wZXJpb2QsICJ5ZWFycyIpLAogICAgICAgICB0aW1lX2hvdXJzID0gYXMubnVtZXJpYyh0aW1lX3BlcmlvZCwgImhvdXJzIiksCiAgICAgICAgIHRpbWVfbWlucyA9IGFzLm51bWVyaWModGltZV9wZXJpb2QsICJtaW51dGVzIiksCiAgICAgICAgIHRpbWVfc2Vjb25kcyA9IGFzLm51bWVyaWModGltZV9wZXJpb2QsICJzZWNvbmRzIiksCiAgICAgICAgICkKYGBgCldoZW4gY3JlYXRpbmcvcmVwb3J0aW5nIHBlcmlvZHMsIGl0IGlzIGltcG9ydGFudCB0byBiZSBjYXJlZnVsL2NhdXRpb3VzIGFib3V0CmxlYXAgeWVhcnMuIEJlY2F1c2UgbGVhcCB5ZWFycyBkb24ndCBqdXN0IGFwcGVhciBvdXQgb2Ygbm93aGVyZSwgaXQgaXMgaW1wb3J0YW50CnRvIGJlIGF3YXJlIG9mIHNtYWxsIGNoYW5nZXMsIGkuZSBzZWNvbmRzL21pbnV0ZXMvaG91cnMsIGV0YyAtIGVhY2ggeWVhcgppcyAzNjUuMjUgeWVhcnMgCkl0IGlzIHJlYWxseSBvbmx5IGltcG9ydGFudCB0byB3YXRjaCB0aGF0IHlvdSBnZXQgdGhlIHJpZ2h0IGFtb3VudCBvZiBkYXlzCgoKTmV0ZmxpeCBwcm9tb3RlcyBuZXcgcmVsZWFzZXMgZm9yIDIgd2Vla3MgYmVmb3JlIHJlbGVhc2UKTmV0ZmxpeCB0YWtlcyBzaG93cy9tb3ZpZXMgZG93biBhZnRlciA0IG1vbnRocwpgYGB7cn0KbmV0ZmxpeCA8LSBuZXRmbGl4ICU+JQogIG11dGF0ZShwcm9tb19kYXRlID0gZGF0ZV9hZGRlZCAtIHdlZWtzKDIpLAogICAgICAgICByZW1vdmFsX2RhdGUgPSBkYXRlX2FkZGVkICsgbW9udGhzKDQpKQoKbmV0ZmxpeCAlPiUKICBzZWxlY3QoZGF0ZV9hZGRlZCwgcHJvbW9fZGF0ZSwgcmVtb3ZhbF9kYXRlKQpgYGAKCgpEdXJhdGlvbnM6ClJlY29yZHMgdGhlIGV4YWN0IHBhc3NhZ2Ugb2YgdGltZSBzaW5jZSBhIGRhdGUKYGBge3J9Cm5ldGZsaXggPC0gbmV0ZmxpeCAlPiUKICBtdXRhdGUodGltZV9kdXJhdGlvbiA9IGFzLmR1cmF0aW9uKHRvZGF5KCkgLSBkYXRlX2FkZGVkKSkKCm5ldGZsaXggJT4lCiAgc2VsZWN0KGRhdGVfYWRkZWQsIHRpbWVfZGlmZnRpbWUsIHRpbWVfeWVhcnMsIHRpbWVfZHVyYXRpb24pCmBgYAoKClRpbWV6b25lcwpgYGB7cn0KeW1kX2htcygiMjAyMS0xMi0zMSAxMTozMDoyMiIsIHR6ID0gIkF0bGFudGljL0Zhcm9lIikKYGBgCgoKRm9yY2VfdHogLSBhZGQgYSB0aW1lem9uZSwgZG9lc24ndCBjaGFuZ2UgZGF0ZS90aW1lCndpdGhfdHogLSBmaWd1cmVzIG91dCB3aGF0IGRhdGUgYW5kIHRpbWUgd291bGQgYmUgaWYgeW91IHdlcmUgaW4gdGhhdCB0aW1lIHpvbmUKYGBge3J9Cm5ldGZsaXggPC0gbmV0ZmxpeCAlPiUKICBtdXRhdGUoZGF0ZV90ejEgPSBmb3JjZV90eihkYXRlX2FkZGVkLCB0em9uZSA9ICJBc2lhL1NpbmdhcG9yZSIpLAogICAgICAgICBkYXRlX3R6MiA9IHdpdGhfdHooZGF0ZV9hZGRlZCwgdHpvbmUgPSAiQXNpYS9TaW5nYXBvcmUiKSkKCm5ldGZsaXggJT4lCiAgc2VsZWN0KGRhdGVfYWRkZWQsIGRhdGVfdHoxLCBkYXRlX3R6MikKYGBgCgoKTGVzc29uIDIKClRpbWVzZXJpZXMKClBhcnQgb2YgdGhlIFBEQQoKLSBjb250aW51b3VzIGRhdGEgb3ZlciB0aW1lCi0gdGltZSBpcyB0aGUgcHJpbWFyeSBheGlzCi0gYXBwZW5kIHJhdGhlciB0aGFuIHJlcGxhY2UKCgpgYGB7cn0KbGlicmFyeSh0c2liYmxlKQpsaWJyYXJ5KHRzaWJibGVkYXRhKQpsaWJyYXJ5KGZlYXN0cykKbGlicmFyeShmYWJsZSkKYGBgCgp0c2liYmxlIGlzIGZvciB3b3JraW5nIHdpdGggdGltZXNlcmllcyBkYXRhCmZlYXN0cyAtIGZlYXR1cmVzIGV0YyBmb3Igc3RhdGlzdGljcwoKaW5kZXhfdmFyIC0gZmluZCB0aGUgaW5kZXggb2YgYSB0c2liYmxlCmtleV92YXJzIC0gZmluZCB0aGUga2V5IG9mIGEgdHNpYmJsZQoKWW91IGNhbiB1c2UgZHBseXIgdmVyYnMgd2l0aCB0c2liYmxlLCBidXQgeW91IGNhbm5vdCBkZXNlbGVjdCAvIGRyb3AgdGltZSBhcyBhIApjb2x1bW4KCmBgYHtyfQojIGV4dHJhIGZ1bmN0aW9ucyB0byBmaWx0ZXIgZGF0ZXMKdmljX3llYXIgPC0gdmljX2VsZWMgJT4lCiAgIGZpbHRlcl9pbmRleCgiMjAxMi0wMSIpCgpgYGAKCmBgYHtyfQojIHZpY195ZWFyICU+JQojICAgZ3JvdXBfYnkoeWVhcikgJT4lCiMgICBzdW1tYXJpc2UobWVhbl90ZW1wID0gbWVhbihUZW1wZXJhdHVyZSkpCgp2aWNfeWVhciAlPiUKICBpbmRleF9ieShUaW1lKSAlPiUKICBzdW1tYXJpc2UobWVhbl90ZW1wID0gbWVhbihUZW1wZXJhdHVyZSkpCgp5b3UgbmVlZCB0byBpbmRleCBpbnN0ZWFkIG9mIGdyb3VwCmBgYAoKTWFrZSBwbG90cwpgYGB7cn0KZWxlY19kYXRlIDwtIHZpY19lbGVjICU+JQogIGluZGV4X2J5KERhdGUpICU+JQogIHN1bW1hcmlzZShtZWFuX3RlbXAgPSBtZWFuKFRlbXBlcmF0dXJlKSkKCmVsZWNfZGF0ZSAlPiUKICBnZ3Bsb3QoKSArCiAgYWVzKHggPSBEYXRlLCB5ID0gbWVhbl90ZW1wKSArCiAgZ2VvbV9saW5lKCkKYGBgCgpgYGB7cn0KZWxlY19tb250aCA8LSB2aWNfZWxlYyAlPiUKICBtdXRhdGUobW9udGggPSBtb250aChEYXRlLCBsYWJlbCA9IFQpKSAlPiUgCiAgaW5kZXhfYnkobW9udGgpICU+JSAKICBzdW1tYXJpc2UobWVhbl90ZW1wID0gbWVhbihUZW1wZXJhdHVyZSkpICU+JSAKICBnZ3Bsb3QoYWVzKHggPSBtb250aCwgeSA9IG1lYW5fdGVtcCkpICsKICBnZW9tX2xpbmUoZ3JvdXAgPSAxKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHNsaWRlcikKYGBgCgpgYGB7cn0KIyBjYWxjdWxhdGUgYSByb2xsaW5nIHdpbmRvdwojIHRoZSAuIGluIC5mIGNvcnJlc3BvbmRzIHRvIHRoZSBjdXJyZW50IHdpbmRvdyBpbiB0aGUgZGF0YSwgaS5lLiBlYWNoIHN1YnNldAplbGVjX3JvbGxpbmcgPC0gdmljX2VsZWMgJT4lIAogIG11dGF0ZSgKICAgIHRlbXBfbW92aW5nX2F2ZyA9IHNsaWRlX2RibCgKICAgICAgLnggPSBUZW1wZXJhdHVyZSwgCiAgICAgIC5mID0gfiBtZWFuKC4sIG5hLnJtID0gVFJVRSksCiAgICAgIC5iZWZvcmUgPSAyMDAwLAogICAgICAuYWZ0ZXIgPSAyMDAwLAogICAgICAuY29tcGxldGUgPSBUUlVFCiAgICApCiAgKQoKZWxlY19yb2xsaW5nCmBgYAoKYGBge3J9CiMgcGxvdCB0aGUgZGF0YSAKZ2dwbG90KGVsZWNfcm9sbGluZykgKyAKICBnZW9tX2xpbmUoYWVzKHggPSBEYXRlLCB5ID0gVGVtcGVyYXR1cmUpLCBjb2xvdXIgPSAiZ3JleSIpICsgCiAgZ2VvbV9saW5lKGFlcyh4ID0gRGF0ZSwgeSA9IHRlbXBfbW92aW5nX2F2ZyksIGNvbG91ciA9ICJyZWQiKQpgYGAKClRoZSBzbGlkZV9kYmwoKSBmdW5jdGlvbiBtYWtlcyBhIG51bWJlciBvZiBhcmd1bWVudHMgYXZhaWxhYmxlLCBzbyBsZXTigJlzIHBsYXkgYXJvdW5kIHdpdGggdGhlbSBhIGxpdHRsZSEKVHJ5IHNldHRpbmcgLmJlZm9yZSBhbmQgLmFmdGVyIHRvIDEwMC4gSG93IGRvZXMgdGhlIHBsb3QgY2hhbmdlPwpXaGF0IGhhcHBlbnMgaWYgeW91IHNldCAuY29tcGxldGUgPSBUUlVFPwoKCkZlYXN0cyBwYWNrYWdlCi0gdXNlZnVsIGZvciBwbG90dGluZwoKCmBgYHtyfQppbmRleF92YXIodG91cmlzbSkKa2V5X3ZhcnModG91cmlzbSkKYGBgCgoKYGBge3J9CmhvbGlkYXlzIDwtIHRvdXJpc20gJT4lCiAgZmlsdGVyKFB1cnBvc2UgJWluJSBjKCJIb2xpZGF5IiwiQnVzaW5lc3MiKSkgJT4lCiAgZ3JvdXBfYnkoU3RhdGUpICU+JQogIHN1bW1hcmlzZShUcmlwcyA9IHN1bShUcmlwcykpCgpob2xpZGF5cwpgYGAKCmBgYHtyfQpob2xpZGF5cyAlPiUKICBhdXRvcGxvdChUcmlwcykKYGBgCgpgYGB7cn0KaG9saWRheXMgJT4lCiAgZmlsdGVyKFN0YXRlICVpbiUgYygiUXVlZW5zbGFuZCIsICJOZXcgU291dGggV2FsZXMiLCAiVmljdG9yaWEiKSkgJT4lCiAgZ2dfc2Vhc29uKFRyaXBzKQpgYGAKCgpgYGB7cn0KaG9saWRheXMgJT4lCiAgZmlsdGVyKFN0YXRlICVpbiUgYygiUXVlZW5zbGFuZCIsICJOZXcgU291dGggV2FsZXMiLCAiVmljdG9yaWEiKSkgJT4lCiAgZ2dfc3Vic2VyaWVzKFRyaXBzKQpgYGAKCgo=